﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebAppPlanProduccion.Code;
using WebAppPlanProduccion.Code.Security;
using Web.Framework;
using PlanProd.Contracts;
using PlanProd.Contracts.Search;

namespace WebAppPlanProduccion.App
{
    public partial class IngresoDeProductoList : BasePage
    {

        private List<Destino> destinos
        {
            get { return (List<Destino>)ViewState["destinos"]; }
            set { ViewState["destinos"] = value; }
        }

        private List<Temporada> temporadas
        {
            get { return (List<Temporada>)ViewState["temporadas"]; }
            set { ViewState["temporadas"] = value; }
        }        

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                EsPaginaQueRecurdaFiltros = true;
                HasPermissionToSeeMe(PlanProdSecurity.INGRESOPRODUCTO_VER);

                if (!this.IsPostBack)
                {
                    UIHelper.LoadProveedores(this.cboProveedor, "Todos");
                    UIHelper.LoadDestinos(this.cboDestino, "Todos");
                    UIHelper.LoadTemporadas(this.cboTemporada, "Todas");
                    destinos = WebServiceHelper.GetDestinos(BaseWebPage.CompanyId, string.Empty);
                    temporadas = WebServiceHelper.GetTemporadas(BasePage.CompanyId, string.Empty, null, null, true);
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        private List<LinkButton> actionButtons = new List<LinkButton>();
        LinkButton nuevoButton = new LinkButton();
        LinkButton importarPlanillaButton = new LinkButton();
        LinkButton bajarArchivoDeEjemploPlanillaButton = new LinkButton();
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            nuevoButton.ID = "BoCommandNuevo";
            nuevoButton.Text = "Nuevo";
            nuevoButton.Click += new EventHandler(btnAgregarNuevo_Click);
            actionButtons.Add(nuevoButton);

            importarPlanillaButton.ID = "BoCommandimportarPlanillaButton";
            importarPlanillaButton.Text = "Actualizar Productos con Excel";
            importarPlanillaButton.ClientIDMode = System.Web.UI.ClientIDMode.Static;
            actionButtons.Add(importarPlanillaButton);

            bajarArchivoDeEjemploPlanillaButton.ID = "BoCommandBajarEjemplo";
            bajarArchivoDeEjemploPlanillaButton.Text = "Bajar Excel de Ejemplo";
            bajarArchivoDeEjemploPlanillaButton.ClientIDMode = System.Web.UI.ClientIDMode.Static;
            bajarArchivoDeEjemploPlanillaButton.OnClientClick = "location.href = '/SampleFiles/EjIngresoDeProducto.xlsx'; return false;";
            actionButtons.Add(bajarArchivoDeEjemploPlanillaButton);             

            base.LoadContextActions(actionButtons);
        }

        protected override void ApplySecurity()
        {
            nuevoButton.Visible =
            this.btnAgregarNuevo.Visible = HasPermissionFor(PlanProdSecurity.INGRESOPRODUCTO_CREAR);

            lnkActualizarProducto.Visible =
            importarPlanillaButton.Visible = HasPermissionFor(PlanProdSecurity.INGRESOPRODUCTO_IMPORTAR);

            if (this.GridIngresosProducto.DataSource != null)
            {
                this.GridIngresosProducto.Columns[0].Visible = HasPermissionFor(PlanProdSecurity.INGRESOPRODUCTO_EDITAR);
                this.GridIngresosProducto.Columns[1].Visible = HasPermissionFor(PlanProdSecurity.INGRESOPRODUCTO_ELIMINAR);
            }

            this.lnkActualizarProducto.Visible = HasPermissionFor(PlanProdSecurity.INGRESOPRODUCTO_CREAR) || HasPermissionFor(PlanProdSecurity.INGRESOPRODUCTO_EDITAR);
        }

        private void Buscar()
        {
            RecordarFiltrosSeleccionados();
            SearchIngresoDeProducto search = new SearchIngresoDeProducto();
            search.FechaDesde = UIHelper.GetDateTimeFromInputText(this.txtFechaDesde.Text);
            search.FechaHasta = UIHelper.GetDateTimeFromInputText(this.txtFechaHasta.Text);
            search.CodigoProducto = this.txtProducto.Text;
            search.ProveedorId = UIHelper.GetIntFromInputCbo(this.cboProveedor);
            search.DestinoId = UIHelper.GetIntFromInputCbo(this.cboDestino);
            search.CodigoColor = this.txtColor.Text;
            search.TemporadaId = UIHelper.GetIntFromInputCbo(this.cboTemporada);
            search.NumeroRemito = this.txtRemito.Text;                

            List<IngresoDeProducto> ingresos = WebServiceHelper.GetIngresoDeProducto(search);           
            this.GridIngresosProducto.DataSource = ingresos;
            this.GridIngresosProducto.DataBind();

            pnlResults.Visible = true;
        }

        protected void lnkBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                Buscar();
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void GridIngresosProducto_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (e.CommandName == "editar")
                {
                    int ingresoId = Convert.ToInt32(this.GridIngresosProducto.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    this.Response.Redirect(string.Format("/App/IngresoDeProductoEdit.aspx?Id={0}", ingresoId), true);
                }
                else if (e.CommandName == "eliminar")
                {
                    int ingresoId = Convert.ToInt32(this.GridIngresosProducto.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    WebServiceHelper.EliminarIngresoDeProducto(ingresoId);
                    Buscar();
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void GridIngresosProducto_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                this.GridIngresosProducto.PageIndex = e.NewPageIndex;

                Buscar();
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void GridIngresosProducto_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    e.Row.Cells[0].Attributes.Add("title", "Editar");
                    e.Row.Cells[1].Attributes.Add("title", "Eliminar");
                    IngresoDeProducto item = (IngresoDeProducto)e.Row.DataItem;
                    ImageButton btnEliminarCtrl = (ImageButton)e.Row.FindControl("btnEliminar");
                    btnEliminarCtrl.OnClientClick = string.Format("return confirm('Está seguro que desea eliminar el siguiente registro? {0}')", item.Id);

                    e.Row.Cells[6].Text = destinos.Where(d => d.Id == item.DestinoId).Single().Nombre;   
                    if(item.TemporadaId.HasValue)
                    {
                        e.Row.Cells[7].Text = temporadas.Where(t => t.Id == item.TemporadaId).Single().Nombre;
                    }
                    else
                    {
                        e.Row.Cells[7].Text  = string.Empty;
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void btnAgregarNuevo_Click(object sender, EventArgs e)
        {
            this.Response.Redirect("/App/IngresoDeProductoEdit.aspx", true);
        }
    }
}